import numpy as np
from glob import glob
import itertools
from skimage.io import imread, imshow
from skimage.feature import canny
from skimage.filters import sobel, laplace, prewitt, roberts
from scipy import ndimage as ndi
import cv2
import matplotlib.pyplot as plt
images_path = glob('images/*.jpg')
images_path
images = list(map(imread, images_path))
fig, axs = plt.subplots(nrows=len(images), ncols=1, figsize=(8, 10))
for idx, image in enumerate(images):
axs[idx].imshow(image);
def canny_segmentation(image, sigma=1, plot_edges=True, ax=None):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = canny(gray, sigma)
if plot_edges:
ax.imshow(edges);
return edges
fig, axs = plt.subplots(nrows=len(images), ncols=1, figsize=(8, 10))
for idx, image in enumerate(images):
canny_segmentation(image, ax=axs[idx])
sigma_range = range(1, 10)
edges_images = [[canny_segmentation(img, sigma=sig, plot_edges=False) for sig in sigma_range]
for img in images]
fig, axs = plt.subplots(nrows=len(images), ncols=len(sigma_range), figsize=(80, 40))
for i, j in itertools.product(range(len(images)), range(len(sigma_range))):
axs[i][j].imshow(edges_images[i][j]);
axs[i][j].set_title('Sigma: {}'.format(sigma_range[j]))
fig, axs = plt.subplots(nrows=len(sigma_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(edges_images[0]):
axs[idx].imshow(edge);
axs[idx].set_title('Sigma: {}'.format(sigma_range[idx]))
fig, axs = plt.subplots(nrows=len(sigma_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(edges_images[1]):
axs[idx].imshow(edge);
axs[idx].set_title('Sigma: {}'.format(sigma_range[idx]))
fig, axs = plt.subplots(nrows=len(sigma_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(edges_images[2]):
axs[idx].imshow(edge);
axs[idx].set_title('Sigma: {}'.format(sigma_range[idx]))
fig, axs = plt.subplots(nrows=len(sigma_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(edges_images[3]):
axs[idx].imshow(edge);
axs[idx].set_title('Sigma: {}'.format(sigma_range[idx]))
less sigma - more detailed edge detection
def sobel_segmentation(image, plot_edges=True, ax=None):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
elevation_map = sobel(gray)
if plot_edges:
ax.imshow(elevation_map);
return elevation_map
sobel_edges_images = list(map(lambda x: sobel_segmentation(x, plot_edges=False), images))
fig, axs = plt.subplots(nrows=len(images), ncols=1, figsize=(8, 10))
for idx, image in enumerate(images):
sobel_segmentation(image, ax=axs[idx])
def laplace_segmentation(image, kernel_size=3, plot_edges=True, ax=None):
edges = laplace(image, ksize=kernel_size)
if plot_edges:
ax.imshow(edges);
return edges
fig, axs = plt.subplots(nrows=len(images), ncols=1, figsize=(8, 10))
for idx, image in enumerate(images):
laplace_segmentation(image, ax=axs[idx])
ksize_range = range(3, 10)
laplace_edges_images = [[laplace_segmentation(img, kernel_size=kernel_size, plot_edges=False)
for kernel_size in ksize_range]
for img in images]
fig, axs = plt.subplots(nrows=len(images), ncols=len(ksize_range), figsize=(80, 40))
for i, j in itertools.product(range(len(images)), range(len(ksize_range))):
axs[i][j].imshow(laplace_edges_images[i][j]);
axs[i][j].set_title('Kernel size: {}'.format(ksize_range[j]))
fig, axs = plt.subplots(nrows=len(ksize_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(laplace_edges_images[0]):
axs[idx].imshow(edge);
axs[idx].set_title('Kernel size: {}'.format(ksize_range[idx]))
fig, axs = plt.subplots(nrows=len(ksize_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(laplace_edges_images[1]):
axs[idx].imshow(edge);
axs[idx].set_title('Kernel size: {}'.format(ksize_range[idx]))
fig, axs = plt.subplots(nrows=len(ksize_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(laplace_edges_images[2]):
axs[idx].imshow(edge);
axs[idx].set_title('Kernel size: {}'.format(ksize_range[idx]))
fig, axs = plt.subplots(nrows=len(ksize_range), ncols=1, figsize=(10, 40))
for idx, edge in enumerate(laplace_edges_images[3]):
axs[idx].imshow(edge);
axs[idx].set_title('Kernel size: {}'.format(ksize_range[idx]))
def prewitt_segmentation(image, plot_edges=True, ax=None):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = prewitt(gray)
if plot_edges:
ax.imshow(edges);
return edges
prewitt_edges_images = list(map(lambda x: prewitt_segmentation(x, plot_edges=False), images))
fig, axs = plt.subplots(nrows=len(images), ncols=1, figsize=(8, 10))
for idx, image in enumerate(images):
prewitt_segmentation(image, ax=axs[idx])
def roberts_segmentation(image, plot_edges=True, ax=None):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = roberts(gray)
if plot_edges:
ax.imshow(edges);
return edges
roberts_edges_images = list(map(lambda x: roberts_segmentation(x, plot_edges=False), images))
fig, axs = plt.subplots(nrows=len(images), ncols=1, figsize=(8, 10))
for idx, image in enumerate(images):
roberts_segmentation(image, ax=axs[idx])